home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / mfract.c < prev    next >
Text File  |  1985-06-03  |  2KB  |  124 lines

  1. #include <graphics.h>
  2. #define SIZE 32   /* size of array */
  3. #define MSX 320   /* midscreen */
  4. #define XK 10 /* X scale */
  5.  
  6. int TILT,ZK;
  7. int map[SIZE+1][SIZE+1];
  8. int ms[641];
  9. double frand();
  10.  
  11. main(argc,argv)
  12. int argc;
  13. char *argv[];
  14. {
  15.     int i,j,sx,sy,sx1,sy1,min,max;
  16.     double f,w;
  17.     if (argc != 4) {
  18.     printf("syntax is: MFRACT tilt-factor z-scale seed-value\n");
  19.     printf("try: mfract 2 3 1027\n");
  20.     exit(0);
  21.     }
  22.    printf("working ...");
  23.     for (i=0;i<641;i++) ms[i]=199;
  24.     TILT=atoi(argv[1]);
  25.     ZK=atoi(argv[2]);
  26.     srand(atoi(argv[3]));
  27.  
  28.     sfract(0,0,SIZE);
  29.  
  30.     min=32766;
  31.     max=-32766;
  32.     for (i=0;i<=SIZE;i++)
  33.      for (j=0;j<=SIZE;j++) {
  34.      sy=(map[i][j]=(TILT*(i+j)+ZK*map[i][j]));
  35.      if (sy<min) min=sy;
  36.      if (sy>max) max=sy;
  37.      }
  38.  
  39.     f = 199.0/(double)(max-min);
  40.     for (i=0;i<=SIZE;i++)
  41.      for (j=0;j<=SIZE;j++) map[i][j]=199-(int)(f*(map[i][j]-min));
  42.  
  43.     scr_setup();
  44.     scr_setmode( 6 );
  45.     scr_clr();
  46.     for (i=0;i<=SIZE;i++) {
  47.        for (j=0;j<=SIZE;j++) {
  48.        sx=MSX+XK*(i-j);
  49.        sy=map[i][j];
  50.        if (j < SIZE) {
  51.           sy1=map[i][j+1];
  52.           sx1=sx-XK;
  53.           hline(sx,sy,sx1,sy1);
  54.           }
  55.        if (i < SIZE ) {
  56.           sx1=sx+XK;
  57.           sy1=map[i+1][j];
  58.           hline(sx,sy,sx1,sy1);
  59.           }
  60.        }
  61.        }
  62.    while ( 0 == scr_csts()) ;
  63.    scr_setmode( 2 );
  64.    scr_clr();
  65.    exit(0);
  66. }
  67.  
  68. hline(x,y,x1,y1)
  69. int x,y,x1,y1;
  70. {
  71.    int dx,dy,hx,hy,hx0,hy0,hx1,hy1,hi;
  72.    double hz;
  73.  
  74.    if (x <= x1) {
  75.       dx = x1-x ;
  76.       dy = y1-y ;
  77.       hx0= x;
  78.       hy0= y;
  79.  
  80.       }
  81.       else {
  82.      dx = x-x1 ;
  83.      dy = y-y1 ;
  84.      hx0 = x1;
  85.      hy0 = y1;
  86.       }
  87.    hz = (double)dy/(double)dx;
  88.    for (hi=0; hi < dx; hi++) {
  89.        hx = hx0+hi;
  90.        hy = hy0+hz*hi;
  91.        if (ms[hx]>=hy) { ms[hx]=hy; pset(hx,hy,7) ; }
  92.        }
  93.    }
  94.  
  95. sfract(x,y,d)
  96.  int x,y,d;
  97.  {
  98.  int d2,xc,yc,xd,yd,lfract();
  99.  
  100.  xd=x+d;
  101.  yd=y+d;
  102.  d2=d>>1;
  103.  xc=x+d2;
  104.  yc=y+d2;
  105.  map[x][yc] = lfract(x,y,x,yd,d);
  106.  map[xc][y] = lfract(x,y,xd,y,d);
  107.  map[xd][yc] = lfract(xd,y,xd,yd,d);
  108.  map[xc][yd] = lfract(x,yd,xd,yd,d);
  109.  map[xc][yc] = (lfract(x,yc,xd,yc,d) + lfract(xc,y,xc,yd,d))/2 ;
  110.  
  111.  if (d2 > 1) {
  112.   sfract(x,y,d2);
  113.   sfract(xc,y,d2);
  114.   sfract(x,yc,d2);
  115.   sfract(xc,yc,d2);
  116.  }
  117. }
  118.  
  119. int lfract(x1,y1,x2,y2,d3)
  120.  int x1,y1,x2,y2,d3;
  121.  {
  122.  return(((map[x1][y1]+map[x2][y2])/2)+d3*(frand()-.5));
  123.  }
  124.